package com.misboot.document.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.misboot.document.dto.FileReqDTO;
import com.misboot.document.service.FileService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * @MethodName
 * @Description  文件相关回调
 * @Param null
 * @Return
 * @Author 湖南佐佑时代科技有限公司<service@zuoyo.com>
 * @Date 2020-10-27 9:14
 */
@Controller
@RequestMapping("v1/3rd/file")
public class FileCallBackController extends DocumentBaseController {

    static Logger logger = LoggerFactory.getLogger(FileCallBackController.class);

    @Autowired
    private FileService fileService;

    /**
     * 获取文件元数据
     */
    @ResponseBody
    @RequestMapping("info")
    public Object getFileInfo(
            @RequestParam Map<String, Object> params,
            String _w_userid, String _w_filepath, String _w_filetype, String _w_fileId
    ) {
        logger.info("获取文件元数据userId:{},path:{},type:{}", _w_userid, _w_filepath, _w_filetype);
        try {
            Map<String, Object> map = fileService.getFileInfo(_w_userid, _w_filepath, _w_filetype, _w_fileId, params);
            logger.info("获取文件元数据{}" + map);
            return map;
        } catch (Exception e) {
            return failure("获取文件元数据异常");
        }
    }


    /**
     * 通知此文件目前有哪些人正在协作
     */
    @ResponseBody
    @PostMapping("online")
    public Object fileOnline(
            @RequestBody JSONObject obj, @RequestParam Map<String, Object> params
    ) {
        logger.info("通知此文件目前有哪些人正在协作param:{}", JSON.toJSON(obj));
//        Object object = fileService.fileOnline(obj, params);
        return success("通知此文件目前有哪些人正在协作param:{}" + JSON.toJSON(obj));
    }


    /**
     * 上传文件新版本
     */
    @ResponseBody
    @PostMapping("save")
    public Object fileSave(
            @RequestBody MultipartFile file,
            String _w_userid,
            @RequestParam Map<String, Object> params
    ) {
        logger.info("上传文件新版本");
        Map<String, Object> map = fileService.fileSave(file, _w_userid, params);
        return map;
    }

    /**
     * 获取特定版本的文件信息
     */
    @ResponseBody
    @GetMapping("version/{version}")
    public Object fileVersion(
            @PathVariable Integer version
    ) {
        logger.info("获取特定版本的文件信息version:{}", version);
        Map<String, Object> res = fileService.fileVersion(version);
        return res;
    }


    /**
     * 文件重命名
     */
    @ResponseBody
    @PutMapping("rename")
    public Object fileRename(
            @RequestBody FileReqDTO req,
            String _w_userid,
            @RequestParam Map<String, Object> params
    ) {
        logger.info("文件重命名param:{},userId:{}", JSON.toJSON(req), _w_userid);
        fileService.fileRename(req.getName(), _w_userid, params);
        return success("文件重命名");
    }


    /**
     * 获取所有历史版本文件信息
     */
    @ResponseBody
    @PostMapping("history")
    public Object fileHistory(
            @RequestBody FileReqDTO req
    ) {
        logger.info("获取所有历史版本文件信息param:{}", JSON.toJSON(req));
        Map<String, Object> result = fileService.fileHistory(req);
        return result;
    }

    /**
     * 新建文件
     */
    @ResponseBody
    @PostMapping("new")
    public Object fileNew(
            @RequestBody MultipartFile file,
            String _w_userid, @RequestParam Map<String, Object> params
    ) {
        logger.info("新建文件_w_userid:{}", _w_userid);
        Map<String, Object> res = fileService.fileNew(file, _w_userid, params);
        return res;
    }

    /**
     * 文件格式转换回调--wps官方回掉用
     */
    @ResponseBody
    @PostMapping("convertCallback")
    public Object callback(
            HttpServletRequest request
    ) {
        logger.info("文件转换回掉");
        fileService.convertCallBack(request);
        return success("文件格式转换回调--wps官方回掉用");
    }

}
